﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Seguridad.Business;
using Crosland.Automotriz.Seguridad.Entity;
using System.Configuration;
using Crosland.Automotriz.Logic.Interfaces;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Seguridad.ControlExeption;

namespace Crosland.Automotriz.Web.Seguridad
{
    public partial class wFrmUsuario : System.Web.UI.Page
    {

        clsUsuarioLogic negocioUsuario = new clsUsuarioLogic();
        iTablaGeneralDet BL_t_mae_tabla_general_DetLogic = new clsT_Mae_Tabla_General_DetLogic();
        string idSeguridad = ConfigurationManager.AppSettings["Seguridad"];
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);
                this.cargarTipoUsuario();
                cboTipoUsuario.SelectedIndex = 0;
                if (Session["TipoUsuario"] != null &&  Session["chkEstado"]!=null) {
                    cboTipoUsuario.Value = Session["TipoUsuario"].ToString();
                    chkEstado.Checked = Convert.ToBoolean(Session["chkEstado"]);
                }
                this.ListaUsuarios();
            }        
           
        }

        private void ListaUsuarios() {
            try
            {
                string Estado = string.Empty;
                if (chkEstado.Checked) {  Estado = "A";     } else { Estado = "I"; }
                gvListUsuario.DataSource = negocioUsuario.listaUsuariosEstadosActivosInactivos(cboTipoUsuario.Text, Estado);
                gvListUsuario.DataBind();        
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaUsuarios");
                MensajesError(ex.Message, ex, "ListaUsuarios");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ListaUsuarios");
                MensajesError(ex.Message, ex, "ListaUsuarios");
            }

            //catch (Exception ex)
            //{
            //    lblMensajeGeneral.Text = "ERROR: " + ex.Message;
            //    popupmsj.ShowOnPageLoad = true;
            //}
           
        
        
        }

        protected void gvListUsuario_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListaUsuarios();
        }

        protected void gvListUsuario_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaUsuarios();
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                int seleccion = Convert.ToInt32(gvListUsuario.FocusedRowIndex.ToString());
                if (seleccion != -1)
                {

                    lblMensaje.Text = String.Empty;
                    lblMensaje.Text = "¿Esta seguro de anular el usuario?";
                    string script = "ShowConfirmacion();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
                }
                else
                {
                    string script = "ShowMsj();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
                }
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnEliminar_Click");
                MensajesError(ex.Message, ex, "btnEliminar_Click");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnEliminar_Click");
                MensajesError(ex.Message, ex, "btnEliminar_Click");
            }

            //catch(Exception ex)
            //{
            //    lblMensajeGeneral.Text = "ERROR: " + ex.Message;
            //    popupmsj.ShowOnPageLoad = true;
            //}
            
        }

        private void Eliminar() {
            try
            {
                negocioUsuario.Actualiza_EstadoUsuario("I", Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "ID_USUARIO")));
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Eliminar");
                MensajesError(ex.Message, ex, "Eliminar");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Eliminar");
                MensajesError(ex.Message, ex, "Eliminar");  
            }

            //catch (Exception ex)
            //{
            //    lblMensajeGeneral.Text = "ERROR: " + ex.Message;
            //    popupmsj.ShowOnPageLoad = true;
            //}
        }
   
        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            this.Eliminar();
            this.ListaUsuarios();
        }

        private void cargarTipoUsuario()
        {

            cboTipoUsuario.DataSource = BL_t_mae_tabla_general_DetLogic.listarFiltroTipoUsuario();
            cboTipoUsuario.ValueField = "ID_GENERAL_DET";
            cboTipoUsuario.TextField = "DES_LARGA";          
            cboTipoUsuario.DataBind();
        }

        private  void DatosSession(string opcion) {
           Session["operacion"] = opcion;
           Session["TipoUsuario"]= cboTipoUsuario.Value;
           Session["chkEstado"] = chkEstado.Checked;
           Session["ID_USUARIO"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "ID_USUARIO"));
           Session["DES_NOMBRE"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "DES_NOMBRE"));
           Session["DES_APELLIDOS"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "DES_APELLIDOS"));
           Session["DES_EMAIL"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "DES_EMAIL"));
           Session["IND_ESTADO"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "IND_ESTADO"));
           Session["DES_PASSWORD"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "DES_PASSWORD"));
           Session["USR_CREACION"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "USR_CREACION"));
           Session["DES_LARGA"] = Convert.ToString(gvListUsuario.GetRowValues(gvListUsuario.FocusedRowIndex, "DES_LARGA"));
        }

        private void DatosSessionLimpiar() {

            Session["operacion"] = null;
            Session["TipoUsuario"] = null;
            Session["chkEstado"] = null;
            Session["ID_USUARIO"] = null;
            Session["DES_NOMBRE"] = null;
            Session["DES_APELLIDOS"] =null;
            Session["DES_EMAIL"] = null;
            Session["IND_ESTADO"] =null;
            Session["DES_PASSWORD"] =null;
            Session["USR_CREACION"] =null;
            Session["DES_LARGA"] = null;
        
        
        }

        protected void btnFiltrarTipoUsuario_Click(object sender, EventArgs e)
        {
      
            this.ListaUsuarios();
        }

        protected void chkEstado_CheckedChanged(object sender, EventArgs e)
        {
            ListaUsuarios();
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            this.DatosSession("1");
            Response.Redirect("~/Seguridad/wFrmUsuarioModificar.aspx?id=" + idSeguridad);
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
         int seleccion = Convert.ToInt32(gvListUsuario.FocusedRowIndex.ToString());
         if (seleccion != -1) {this.DatosSession("2"); Response.Redirect("~/Seguridad/wFrmUsuarioModificar.aspx?id=" + idSeguridad); }
         else { lblMensajeGeneral.Text = "Seleccione un registro a modificar"; popupmsj.ShowOnPageLoad = true; }           
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            this.DatosSessionLimpiar();
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idSeguridad);
        }


        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }



        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
    
    
    
    }
}